/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
//import java.util.ArrayList;
//import java.util.Arrays;
package Pojo;

import java.util.ArrayList;

/**Classe para objetos do tipo Cliente, onde serão contidos, valores e métodos 
* para o mesmo
 *
 * @author Higor
 */
public class Cliente implements Comparable<Cliente>{
    
    private ArrayList<Pedido> pedidos = new ArrayList<Pedido>();
    private String nome;
    private String cpf;
    private String endereco;

    public Cliente(){
        
    }
    
    
    /**Método para preenchimento dos dados do Cliente
     * 
     * @param nome String - Nome do Cliente
     * @param cpf String - CPF do Cliente
     * @param pedido Pedido - pedido relacionado ao Cliente
     */
    public Cliente(String nome,String cpf,Pedido pedido){
        this.nome=nome;
        this.cpf=cpf;
        this.pedidos.add(pedido);
    }
    
    
    /**Método para preenchimento dos dados do Cliente
     * 
     * @param nome String - Nome do Cliente
     * @param cpf String - CPF do Cliente
     * @param endereco - Endereço do Cliente
     */
    public Cliente(String nome,String cpf,String endereco){
        this.nome=nome;
        this.cpf=cpf;
        this.endereco=endereco;
    }

    
    /**Método para preencher o Nome do Cliente
     * 
     * @param nome String - Nome do Cliente
     */
    public void setNome(String nome) {
            this.nome=nome;
    }

    
    /**Método para preencher o CPF do Cliente
     * 
     * @param cpf String - CPF do Cliente
     */
    public void setCpf(String cpf) {
           this.cpf=cpf;
    }

    
    /**Método para preencher Endereco do Cliente
     * 
     * @param endereco String - Endereco do Cliente
     */
    public void setEndereco(String endereco) {
            this.endereco=endereco;
    }
    
    
    /**Método que retorna o nome do Cliente
     * 
     * @return String - Nome do Cliente
     */
    public String getNome() {
            return (this.nome);
    }

    
    /**Método que retorna o CPF do Cliente
     * 
     * @return String - CPF do Cliente
     */
    public String getCpf() {
        return cpf;
    }

    
    /**Método que retorna CPF do Cliente
     * 
     * @return String - Endereco do Cliente 
     */
    public String getEndereco() {
        return endereco;
    }
    
    
    /**Método que retorna a lista de pedidos de do Cliente
     * 
     * @return ArrayList - ArrayList do tipo Pedidos que contem pedidos de um
     * Cliente
     */
    
    public ArrayList<Pedido> getPedidos(){
        return pedidos;
    }
    
    
    /**Método para adicionar um novo pedido à lista de pedidos do Cliente
     * 
     * @param pedido Pedido - Contem as informações de um Pedido
     */
    public void AddPedidos(Pedido pedido){
        if(!this.pedidos.contains(pedido)){
            this.pedidos.add(pedido);
        }
    }
    /**Método que funciona parecido com o equals original. Porem faz uso do nome 
     * do cliente
     * 
     * @param obj Object - Geralmente é um Cliente
     * @return Cliente - Retorno do Cliente caso ele seja o procurado, senao null
     */
    public boolean equals(Object obj){
        
        if(!(obj instanceof Cliente)){
            return false;
        }
        Cliente cliente = (Cliente)obj;
        return (this.nome.equals(cliente.nome));
    }
    
    
    /**Método que funciona parecido com o compareTo original. Porem faz o uso do 
     * CPF do cliente
     * 
     * @param cliente Cliente - Classe que contem informações do Cliente
     * @return int - Valor que serve para confirma se é o cliente procurado
     */
    public int compareTo(Cliente cliente){
        if(this.cpf.compareTo(cliente.cpf)==0){
            return 0;
        }else if(this.cpf.compareTo(cliente.cpf)<0){
            return -1;
        }else
            return 1;           
    }
}
